from PIL import Image
import os

def convert_to_ico(input_path, output_path, sizes=[(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]):
    # 打开原始图片
    img = Image.open(input_path)
    
    # 确保图片是RGBA模式
    if img.mode != 'RGBA':
        img = img.convert('RGBA')
    
    # 创建不同尺寸的图标
    icon_sizes = []
    for size in sizes:
        # 创建一个透明背景的新图片
        new_img = Image.new('RGBA', size, (0, 0, 0, 0))
        
        # 调整原图大小并保持纵横比，使用高质量的重采样方法
        img_copy = img.copy()
        img_copy.thumbnail(size, Image.Resampling.LANCZOS)
        
        # 计算居中位置
        paste_x = (size[0] - img_copy.width) // 2
        paste_y = (size[1] - img_copy.height) // 2
        
        # 将调整后的图片粘贴到新图片上
        new_img.paste(img_copy, (paste_x, paste_y), img_copy)
        icon_sizes.append(new_img)
    
    # 确保输出目录存在
    os.makedirs(os.path.dirname(output_path), exist_ok=True)
    
    # 保存为ICO文件，使用最高质量设置
    icon_sizes[0].save(
        output_path,
        format='ICO',
        sizes=[(size[0], size[1]) for size in sizes],
        append_images=icon_sizes[1:],
        quality=100
    )

if __name__ == '__main__':
    # 设置输入输出路径
    input_path = 'public/img/logo/爱.png'  # 更新为正确的输入文件路径
    output_path = 'public/favicon.ico'  # 输出文件路径
    
    # 转换图片
    convert_to_ico(input_path, output_path)
    print(f'图标已成功生成到: {output_path}') 